{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as py\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import log_loss  \n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn import metrics"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6      148             72             35        0  33.6   \n",
       "1            1       85             66             29        0  26.6   \n",
       "2            8      183             64              0        0  23.3   \n",
       "3            1       89             66             23       94  28.1   \n",
       "4            0      137             40             35      168  43.1   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  Outcome  \n",
       "0                     0.627   50        1  \n",
       "1                     0.351   31        0  \n",
       "2                     0.672   32        1  \n",
       "3                     0.167   21        0  \n",
       "4                     2.288   33        1  "
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "datapath = 'E:/csdn/week2/data/'\n",
    "data = pd.read_csv(datapath+\"diabetes.csv\")\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 768 entries, 0 to 767\n",
      "Data columns (total 9 columns):\n",
      "Pregnancies                 768 non-null int64\n",
      "Glucose                     768 non-null int64\n",
      "BloodPressure               768 non-null int64\n",
      "SkinThickness               768 non-null int64\n",
      "Insulin                     768 non-null int64\n",
      "BMI                         768 non-null float64\n",
      "DiabetesPedigreeFunction    768 non-null float64\n",
      "Age                         768 non-null int64\n",
      "Outcome                     768 non-null int64\n",
      "dtypes: float64(2), int64(7)\n",
      "memory usage: 54.1 KB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.845052</td>\n",
       "      <td>120.894531</td>\n",
       "      <td>69.105469</td>\n",
       "      <td>20.536458</td>\n",
       "      <td>79.799479</td>\n",
       "      <td>31.992578</td>\n",
       "      <td>0.471876</td>\n",
       "      <td>33.240885</td>\n",
       "      <td>0.348958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.369578</td>\n",
       "      <td>31.972618</td>\n",
       "      <td>19.355807</td>\n",
       "      <td>15.952218</td>\n",
       "      <td>115.244002</td>\n",
       "      <td>7.884160</td>\n",
       "      <td>0.331329</td>\n",
       "      <td>11.760232</td>\n",
       "      <td>0.476951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.078000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>27.300000</td>\n",
       "      <td>0.243750</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>117.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>23.000000</td>\n",
       "      <td>30.500000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0.372500</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>140.250000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>127.250000</td>\n",
       "      <td>36.600000</td>\n",
       "      <td>0.626250</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>199.000000</td>\n",
       "      <td>122.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>846.000000</td>\n",
       "      <td>67.100000</td>\n",
       "      <td>2.420000</td>\n",
       "      <td>81.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin  \\\n",
       "count   768.000000  768.000000     768.000000     768.000000  768.000000   \n",
       "mean      3.845052  120.894531      69.105469      20.536458   79.799479   \n",
       "std       3.369578   31.972618      19.355807      15.952218  115.244002   \n",
       "min       0.000000    0.000000       0.000000       0.000000    0.000000   \n",
       "25%       1.000000   99.000000      62.000000       0.000000    0.000000   \n",
       "50%       3.000000  117.000000      72.000000      23.000000   30.500000   \n",
       "75%       6.000000  140.250000      80.000000      32.000000  127.250000   \n",
       "max      17.000000  199.000000     122.000000      99.000000  846.000000   \n",
       "\n",
       "              BMI  DiabetesPedigreeFunction         Age     Outcome  \n",
       "count  768.000000                768.000000  768.000000  768.000000  \n",
       "mean    31.992578                  0.471876   33.240885    0.348958  \n",
       "std      7.884160                  0.331329   11.760232    0.476951  \n",
       "min      0.000000                  0.078000   21.000000    0.000000  \n",
       "25%     27.300000                  0.243750   24.000000    0.000000  \n",
       "50%     32.000000                  0.372500   29.000000    0.000000  \n",
       "75%     36.600000                  0.626250   41.000000    1.000000  \n",
       "max     67.100000                  2.420000   81.000000    1.000000  "
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Glucose BloodPressure SkinThickness Insulin  BMI最小值为0  说明缺少值，需要进行缺失值处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>30.5</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>30.5</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>23</td>\n",
       "      <td>30.5</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94.0</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168.0</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6      148             72             35     30.5  33.6   \n",
       "1            1       85             66             29     30.5  26.6   \n",
       "2            8      183             64             23     30.5  23.3   \n",
       "3            1       89             66             23     94.0  28.1   \n",
       "4            0      137             40             35    168.0  43.1   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  Outcome  \n",
       "0                     0.627   50        1  \n",
       "1                     0.351   31        0  \n",
       "2                     0.672   32        1  \n",
       "3                     0.167   21        0  \n",
       "4                     2.288   33        1  "
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#from sklearn.preprocessing import Imputer\n",
    "features = ['Glucose','BloodPressure','SkinThickness','Insulin','BMI']\n",
    "for col in features:\n",
    "    median = data[col].median()\n",
    "    \n",
    "    data[col] = data[col].replace(0,median)\n",
    "\n",
    "    #data[col].fillna({col:median})\n",
    "   # print(data[col])\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "data.head()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'number of occuerrences')"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(data.Outcome)\n",
    "pyplot.xlabel('Outcome')\n",
    "pyplot.ylabel('number of occuerrences')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(614, 9)"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "train,test = train_test_split(data,test_size=0.2,random_state=1)\n",
    "train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "进行特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['Outcome']\n",
    "x_train = train.drop([\"Outcome\"],axis = 1)\n",
    "y_test = test['Outcome']\n",
    "x_test = test.drop([\"Outcome\"],axis = 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "ss_X = StandardScaler()\n",
    "x_train = ss_X.fit_transform(x_train)\n",
    "x_test = ss_X.transform(x_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "logistic回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "lr= LogisticRegression()\n",
    "grid= GridSearchCV(lr, tuned_parameters,cv=5, scoring='neg_log_loss')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=1,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.fit(x_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifier LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
      "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
      "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
      "          verbose=0, warm_start=False):\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.79      0.89      0.83        99\n",
      "          1       0.74      0.56      0.64        55\n",
      "\n",
      "avg / total       0.77      0.77      0.76       154\n",
      "\n",
      "\n",
      "Confusion matrix:\n",
      "[[88 11]\n",
      " [24 31]]\n"
     ]
    }
   ],
   "source": [
    "y_test_pred = grid.predict(x_test)\n",
    "print(\"Classification report for classifier %s:\\n%s\\n\"\n",
    "      % (lr, metrics.classification_report(y_test, y_test_pred)))\n",
    "print(\"Confusion matrix:\\n%s\" % metrics.confusion_matrix(y_test, y_test_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([0.00119734, 0.07004423, 0.0007978 , 0.00080438, 0.00119596,\n",
       "        0.00098934, 0.00099611, 0.00099373, 0.00098267, 0.00159717,\n",
       "        0.00219584, 0.00218177, 0.00198808, 0.00220327]),\n",
       " 'std_fit_time': array([4.00306229e-04, 1.38093495e-01, 3.98898620e-04, 4.02357511e-04,\n",
       "        4.09389247e-04, 2.08953721e-05, 2.92293788e-05, 1.30796007e-05,\n",
       "        1.18622288e-05, 4.92922787e-04, 7.38882710e-04, 4.00247095e-04,\n",
       "        1.26632365e-05, 4.04182078e-04]),\n",
       " 'mean_score_time': array([0.00099678, 0.00059843, 0.00119753, 0.00059843, 0.00079627,\n",
       "        0.00099397, 0.00059171, 0.00100036, 0.00060482, 0.00059814,\n",
       "        0.00119758, 0.00100174, 0.001402  , 0.00138798]),\n",
       " 'std_score_time': array([1.67504960e-06, 4.88616667e-04, 3.98542522e-04, 4.88616621e-04,\n",
       "        3.98259304e-04, 1.42868243e-05, 4.83291159e-04, 1.17609737e-05,\n",
       "        4.93949773e-04, 7.97605536e-04, 3.95797332e-04, 7.06877917e-06,\n",
       "        4.83205931e-04, 4.88346732e-04]),\n",
       " 'param_C': masked_array(data=[0.001, 0.001, 0.01, 0.01, 0.1, 0.1, 1, 1, 10, 10, 100,\n",
       "                    100, 1000, 1000],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_penalty': masked_array(data=['l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1',\n",
       "                    'l2', 'l1', 'l2', 'l1', 'l2'],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'C': 0.001, 'penalty': 'l1'},\n",
       "  {'C': 0.001, 'penalty': 'l2'},\n",
       "  {'C': 0.01, 'penalty': 'l1'},\n",
       "  {'C': 0.01, 'penalty': 'l2'},\n",
       "  {'C': 0.1, 'penalty': 'l1'},\n",
       "  {'C': 0.1, 'penalty': 'l2'},\n",
       "  {'C': 1, 'penalty': 'l1'},\n",
       "  {'C': 1, 'penalty': 'l2'},\n",
       "  {'C': 10, 'penalty': 'l1'},\n",
       "  {'C': 10, 'penalty': 'l2'},\n",
       "  {'C': 100, 'penalty': 'l1'},\n",
       "  {'C': 100, 'penalty': 'l2'},\n",
       "  {'C': 1000, 'penalty': 'l1'},\n",
       "  {'C': 1000, 'penalty': 'l2'}],\n",
       " 'split0_test_score': array([-0.69314718, -0.64379016, -0.67930538, -0.53408013, -0.49225147,\n",
       "        -0.48698985, -0.48692042, -0.4872515 , -0.48783045, -0.48787992,\n",
       "        -0.48796184, -0.48795381, -0.48795922, -0.48796132]),\n",
       " 'split1_test_score': array([-0.69314718, -0.63813241, -0.67052788, -0.51866103, -0.4756322 ,\n",
       "        -0.46449212, -0.46069672, -0.46062424, -0.46060341, -0.4606154 ,\n",
       "        -0.46061939, -0.46062158, -0.46062126, -0.46062227]),\n",
       " 'split2_test_score': array([-0.69314718, -0.64904712, -0.66927877, -0.56052366, -0.52436911,\n",
       "        -0.53095626, -0.53777919, -0.53851662, -0.54022419, -0.54048086,\n",
       "        -0.54067669, -0.54070004, -0.54071782, -0.54072221]),\n",
       " 'split3_test_score': array([-0.69314718, -0.64217277, -0.66821203, -0.53904629, -0.49958395,\n",
       "        -0.49999407, -0.49784593, -0.49811684, -0.49817028, -0.49820529,\n",
       "        -0.49822004, -0.49821898, -0.49821584, -0.4982204 ]),\n",
       " 'split4_test_score': array([-0.69314718, -0.63702938, -0.66976948, -0.51432742, -0.48022729,\n",
       "        -0.46549709, -0.466441  , -0.46543502, -0.46609068, -0.46600168,\n",
       "        -0.4660735 , -0.46606853, -0.46607495, -0.46607532]),\n",
       " 'mean_test_score': array([-0.69314718, -0.64204515, -0.67143946, -0.53335056, -0.49442397,\n",
       "        -0.48960393, -0.48995712, -0.49001114, -0.49060685, -0.49065994,\n",
       "        -0.49073371, -0.49073601, -0.49074125, -0.49074373]),\n",
       " 'std_test_score': array([0.        , 0.00430179, 0.00402753, 0.01641952, 0.01722398,\n",
       "        0.02464117, 0.02745464, 0.02790923, 0.02838769, 0.02849121,\n",
       "        0.02854581, 0.02855449, 0.02855941, 0.02856087]),\n",
       " 'rank_test_score': array([14, 12, 13, 11, 10,  1,  2,  3,  4,  5,  6,  7,  8,  9]),\n",
       " 'split0_train_score': array([-0.69314718, -0.6400389 , -0.68266288, -0.52666438, -0.48087591,\n",
       "        -0.47354628, -0.46950169, -0.46933631, -0.46926455, -0.4692628 ,\n",
       "        -0.46926202, -0.469262  , -0.46926199, -0.46926199]),\n",
       " 'split1_train_score': array([-0.69314718, -0.64227482, -0.67073884, -0.52954159, -0.48384417,\n",
       "        -0.47709988, -0.47321288, -0.47303928, -0.47297051, -0.47296868,\n",
       "        -0.47296794, -0.47296792, -0.47296792, -0.47296791]),\n",
       " 'split2_train_score': array([-0.69314718, -0.6366153 , -0.66801156, -0.51715645, -0.46827324,\n",
       "        -0.46320005, -0.45887068, -0.45873172, -0.45865161, -0.4586492 ,\n",
       "        -0.45864833, -0.4586483 , -0.45864829, -0.45864829]),\n",
       " 'split3_train_score': array([-0.69314718, -0.64011555, -0.65986059, -0.52287739, -0.47692759,\n",
       "        -0.46954451, -0.46578154, -0.46565972, -0.46559565, -0.4655944 ,\n",
       "        -0.46559372, -0.4655937 , -0.4655937 , -0.4655937 ]),\n",
       " 'split4_train_score': array([-0.69314718, -0.64296022, -0.66958065, -0.53083428, -0.48394149,\n",
       "        -0.47671008, -0.47257368, -0.4724168 , -0.4723431 , -0.47234149,\n",
       "        -0.4723407 , -0.47234068, -0.47234067, -0.47234067]),\n",
       " 'mean_train_score': array([-0.69314718, -0.64040096, -0.6701709 , -0.52541482, -0.47877248,\n",
       "        -0.47202016, -0.4679881 , -0.46783677, -0.46776508, -0.46776331,\n",
       "        -0.46776254, -0.46776252, -0.46776251, -0.46776251]),\n",
       " 'std_train_score': array([0.        , 0.00221833, 0.00731691, 0.0049518 , 0.00583957,\n",
       "        0.00517786, 0.00526523, 0.00525229, 0.00525481, 0.005255  ,\n",
       "        0.00525503, 0.00525504, 0.00525504, 0.00525504])}"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.48960392979153317\n",
      "{'C': 0.1, 'penalty': 'l2'}\n"
     ]
    }
   ],
   "source": [
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "test_means = -grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = -grid.cv_results_[ 'std_test_score' ]\n",
    "train_means = -grid.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = -grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs), test_scores[i], label= 'penalty:'   + str(value))\n",
    "    pyplot.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    pyplot.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'neg-logloss' )\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "线性svm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import LinearSVC\n",
    "SVC1 = LinearSVC().fit(x_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifier LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0):\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.79      0.89      0.83        99\n",
      "          1       0.74      0.56      0.64        55\n",
      "\n",
      "avg / total       0.77      0.77      0.76       154\n",
      "\n",
      "\n",
      "Confusion matrix:\n",
      "[[88 11]\n",
      " [24 31]]\n"
     ]
    }
   ],
   "source": [
    "y_pred = SVC1.predict(x_test)\n",
    "print(\"Classification report for classifier %s:\\n%s\\n\"\n",
    "      % (SVC1, metrics.classification_report(y_test, y_pred)))\n",
    "print(\"Confusion matrix:\\n%s\" % metrics.confusion_matrix(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "参数调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.7727272727272727\n",
      "accuracy: 0.7662337662337663\n",
      "accuracy: 0.7727272727272727\n",
      "accuracy: 0.7727272727272727\n",
      "accuracy: 0.7727272727272727\n",
      "accuracy: 0.7597402597402597\n",
      "accuracy: 0.6298701298701299\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def fit_grid_point_Linear(C, x_train, y_train, x_test, y_test):\n",
    "    SVC2 =  LinearSVC( C = C)\n",
    "    SVC2 = SVC2.fit(x_train, y_train)\n",
    "    accuracy = SVC2.score(x_test, y_test)\n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy\n",
    "\n",
    "C_s = np.logspace(-3, 3, 7)\n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    tmp = fit_grid_point_Linear(oneC, x_train, y_train, x_test, y_test)\n",
    "    accuracy_s.append(tmp)\n",
    "\n",
    "x_axis = np.log10(C_s)\n",
    "pyplot.plot(x_axis, np.array(accuracy_s), 'b-')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "RBF核SVM正则参数调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC\n",
    "def fit_grid_point_RBF(C, gamma, x_train, y_train, x_test, y_test):\n",
    "    SVC3 =  SVC( C = C, kernel='rbf', gamma = gamma)\n",
    "    SVC3 = SVC3.fit(x_train, y_train)\n",
    "    accuracy = SVC3.score(x_test, y_test)\n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.7532467532467533\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.7727272727272727\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.6948051948051948\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7727272727272727\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.8051948051948052\n",
      "accuracy: 0.6948051948051948\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n"
     ]
    }
   ],
   "source": [
    "C_s = np.logspace(-2, 2, 5)\n",
    "gamma_s = np.logspace(-2, 2, 5)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, x_train, y_train, x_test, y_test)\n",
    "        accuracy_s.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6688311688311688\n",
      "accuracy: 0.7727272727272727\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6753246753246753\n",
      "accuracy: 0.7662337662337663\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.6753246753246753\n",
      "accuracy: 0.7662337662337663\n",
      "accuracy: 0.7662337662337663\n",
      "accuracy: 0.8051948051948052\n"
     ]
    }
   ],
   "source": [
    "C_s = np.logspace(-1, 2, 4)\n",
    "gamma_s = np.logspace(-5, -2, 4)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, x_train, y_train, x_test, y_test)\n",
    "        accuracy_s.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    pyplot.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('RBF_SVM_Otto.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
